import netscape.security.UserTarget;

import java.util.Stack;

class MinStack{
    private Stack<Integer> stack;
    private Stack<Integer> minStack;

    public MinStack(){
        stack=new Stack<>();
        minStack=new Stack<>();
    }
    public void push(int data){
        stack.push(data);
        if(minStack.empty()||minStack.peek()>=data){//这里借助短路，巧妙地隐藏错误
            //反过来写这个条件可能就会报错
            //或者去使用ifelse然后在if去区分
            minStack.push(data);
        }
    }
    public void pop(){
        //不能先出
        if(!stack.empty()){

            if(minStack.peek()== stack.pop()){
                minStack.pop();
            }
            stack.pop();
            //这个后弹出就没事
        }
    }
    public int top(){
        if(stack.empty()){
            return -1;
            //在oj上轻易不要抛-1.可能被认为是错的
        }
        return stack.peek();
    }
    public int getMin(){
        if(minStack.empty()){
            return -1;
        }
        return minStack.pop();}

}
public class Test {
    //找到栈中最小值
    //更新最小值-不管进展还是出战，都会更新才能够满足
    //单纯记录一个值，可以更新的，一个是不行的
//    用一个栈去记录一组最小值
    //进展出战都要和那个记录最小值的栈来比较

    //入栈条件是小于等于
    //等于的话，左边出，最小值 栈也出
    //但是左边还有，就不合适
    //所以需要重新记录
    public boolean IsPopOrder (int[] pushA,int[]popA){
        Stack<Integer> stack=new Stack<>();
        int j=0;
        for (int i = 0; i < pushA.length; i++) {
            stack.push(pushA[i]);
            while(!stack.empty()&&stack.peek()==popA[j]
            &&j< popA.length){
                //空的栈就不能瞄一眼了
                stack.pop();
                j++;
            }
        }
        return stack.empty();
        //只有匹配才能出去
        //所以最后栈是空的，那就代表符合了
        //
    }
    public static void main2(String[] args) {
    MyStack myStack=new MyStack();
        myStack.push(12);
        myStack.push(23);
        myStack.push(34);
        System.out.println("============");

        System.out.println(myStack.peek());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println(myStack.isEmpty());
        System.out.println(myStack.pop());
        //我的天呐

        //递归内部是使用栈来实现的
        //不用递归，那么你自己使用栈来实现非递归
        //用一个泛型的栈来存储我们之前自己写的那个链表
        //以此来模拟非递归过程
        ///利用栈的特性
        //逆序，一些东西
        //栈就有个逆序的功能呢
        //放进去取出来

    }
}
